Aggregations এবং Data Summarization হল ডেটা অ্যানালাইসিসের অত্যন্ত গুরুত্বপূর্ণ অংশ, যা আপনাকে ডেটার বিভিন্ন পরিসংখ্যানিক সংক্ষিপ্ত রূপ দেখতে সাহায্য করে। Spark SQL-এর মাধ্যমে আপনি ডেটাকে বিভিন্ন দৃষ্টিকোণ থেকে বিশ্লেষণ করতে পারেন, যেমন গড় (mean), যোগফল (sum), গুনফল (product), সর্বোচ্চ (max), সর্বনিম্ন (min) ইত্যাদি। এই ধরনের অপারেশনগুলি সাধারণত Group By ও Aggregation Functions ব্যবহার করে করা হয়। চলুন, Spark SQL-এ Aggregations এবং Data Summarization Techniques এর ব্যবহার দেখে নিই।
Aggregations এবং Data Summarization Techniques
১. Basic Aggregation Functions
Spark SQL এ কিছু সাধারণ Aggregation Functions রয়েছে, যা ডেটা Summarization করার জন্য ব্যবহৃত হয়। এই ফাংশনগুলো আপনাকে ডেটার উপর বিভিন্ন পরিসংখ্যানিক অপারেশন করতে সহায়তা করে।
প্রধান Aggregation Functions:
count(): একটি কলামের মোট রেকর্ডের সংখ্যা গণনা করে।sum(): একটি কলামের মোট যোগফল হিসাব করে।avg(): একটি কলামের গড় মান হিসাব করে।min(): একটি কলামের সর্বনিম্ন মান হিসাব করে।max(): একটি কলামের সর্বোচ্চ মান হিসাব করে।first(): একটি কলামের প্রথম মান নেয়।last(): একটি কলামের শেষ মান নেয়।
উদাহরণ:
from pyspark.sql import SparkSession
from pyspark.sql.functions import avg, sum, min, max
# SparkSession তৈরি
spark = SparkSession.builder.appName("Aggregation Example").getOrCreate()
# DataFrame তৈরি
data = [("John", "HR", 30, 5000),
("Alice", "Finance", 25, 6000),
("Bob", "IT", 35, 5500),
("Dave", "HR", 32, 7000),
("Eve", "Finance", 28, 8000)]
columns = ["Name", "Department", "Age", "Salary"]
df = spark.createDataFrame(data, columns)
# Aggregation Function ব্যবহার
df_aggregated = df.groupBy("Department").agg(
avg("Age").alias("avg_age"),
sum("Salary").alias("total_salary"),
min("Age").alias("min_age"),
max("Age").alias("max_age")
)
df_aggregated.show()
আউটপুট:
+----------+-------+-----------+-------+-------+
|Department|avg_age|total_salary|min_age|max_age|
+----------+-------+-----------+-------+-------+
| HR| 31.0| 12000| 30| 32|
| Finance| 26.5| 14000| 25| 28|
| IT| 35.0| 5500| 35| 35|
+----------+-------+-----------+-------+-------+
এখানে:
groupBy("Department"): ডেটাকে বিভাগের ভিত্তিতে গ্রুপ করা হয়েছে।agg(): বিভিন্ন অ্যাগ্রিগেশন ফাংশন প্রয়োগ করা হয়েছে, যেমনavg(),sum(),min(), এবংmax()।
২. Group By Operation
Group By একটি SQL অপারেশন, যা ডেটাকে একটি বা একাধিক কলামের ভিত্তিতে গ্রুপ করে এবং প্রতিটি গ্রুপের জন্য একটি নির্দিষ্ট অ্যাগ্রিগেশন ফাংশন প্রয়োগ করে। এটি সাধারণত বিভিন্ন ধরনের রিপোর্ট তৈরি এবং ডেটার সারাংশ তৈরি করতে ব্যবহৃত হয়।
উদাহরণ:
# Group By এবং Aggregation ফাংশন ব্যবহার
df_grouped = df.groupBy("Department").agg(
count("Name").alias("count"),
avg("Salary").alias("avg_salary")
)
df_grouped.show()
আউটপুট:
+----------+-----+----------+
|Department|count|avg_salary|
+----------+-----+----------+
| HR| 2| 6000.0 |
| Finance| 2| 7000.0 |
| IT| 1| 5500.0 |
+----------+-----+----------+
এখানে:
count("Name"):Departmentঅনুযায়ী নামের সংখ্যা গণনা করা হয়েছে।avg("Salary"): প্রতিটি বিভাগের গড় বেতন হিসাব করা হয়েছে।
৩. Window Functions for Advanced Aggregations
Window Functions ব্যবহার করে আপনি বিভিন্ন ধরনের আরো জটিল অ্যাগ্রিগেশন করতে পারেন। এটি সাধারণত রোলিং সুম, রানিং টোটাল, বা পার্টিশন-বাই-পার্টিশন অপারেশনগুলির জন্য ব্যবহৃত হয়। Spark SQL-এ আপনি window ফাংশন ব্যবহার করে এই ধরনের অ্যাগ্রিগেশন করতে পারেন।
উদাহরণ:
from pyspark.sql.window import Window
from pyspark.sql.functions import row_number
# Window function ব্যবহার
windowSpec = Window.partitionBy("Department").orderBy("Salary")
# প্রতিটি বিভাগের জন্য Salary অনুযায়ী row_number দিন
df_with_row_number = df.withColumn("row_number", row_number().over(windowSpec))
df_with_row_number.show()
আউটপুট:
+-----+----------+---+------+-----------+
| Name|Department|Age|Salary|row_number|
+-----+----------+---+------+-----------+
| John| HR| 30| 5000| 1|
| Dave| HR| 32| 7000| 2|
|Alice| Finance| 25| 6000| 1|
| Eve| Finance| 28| 8000| 2|
| Bob| IT| 35| 5500| 1|
+-----+----------+---+------+-----------+
এখানে:
Window.partitionBy("Department").orderBy("Salary"): প্রতি বিভাগে বেতনের অর্ডার অনুসারে row number দেওয়া হয়েছে।
৪. Handling Missing Data in Aggregations
Spark SQL-এ Missing Data বা Null ভ্যালু পরিচালনার জন্য na.fill(), na.drop() বা na.replace() ফাংশন ব্যবহার করা যায়। এই ফাংশনগুলির মাধ্যমে আপনি অ্যাগ্রিগেশন করার আগে বা পরে ডেটার গ্যাপ পূরণ করতে পারেন।
উদাহরণ:
# Missing data পূর্ণ করা
df_filled = df.na.fill({"Salary": 0, "Age": 30})
df_filled.show()
এখানে:
na.fill()ব্যবহার করেSalaryকলামটিতে যেসব নাল (Null) ভ্যালু ছিল, তা পূর্ণ করা হয়েছে।
৫. Data Summarization Techniques
Spark SQL-এ Data Summarization একটি অত্যন্ত কার্যকরী কৌশল, যা আপনাকে ডেটার একটি সংক্ষিপ্ত, কিন্তু স্পষ্ট দৃশ্য প্রদান করে। এই কৌশলটির মাধ্যমে আপনি ডেটার উপর বিভিন্ন পরিসংখ্যানিক বিশ্লেষণ করতে পারেন।
Describe Function:
Spark SQL-এ describe() ফাংশন ব্যবহার করে একটি DataFrame-এর গড়, সর্বনিম্ন, সর্বোচ্চ, স্ট্যান্ডার্ড ডেভিয়েশন ইত্যাদি সম্পর্কে সংক্ষিপ্ত তথ্য পাওয়া যায়।
# describe function ব্যবহার
df.describe().show()
আউটপুট:
+-------+-----+----------+----+------+
|summary| Name|Department| Age|Salary|
+-------+-----+----------+----+------+
| count| 5| 5| 5| 5|
| mean| null| null| 29.0| 6700|
| stddev| null| null| 3.14| 1202|
| min| Alice| Finance| 25| 5000|
| max| John| HR| 35| 8000|
+-------+-----+----------+----+------+
এখানে:
describe()ডেটার মোট রেকর্ড, গড়, স্ট্যান্ডার্ড ডেভিয়েশন, সর্বনিম্ন এবং সর্বোচ্চ মান দেখায়।
সারাংশ
Spark SQL-এ Aggregations এবং Data Summarization Techniques আপনাকে ডেটার উপর বিভিন্ন পরিসংখ্যানিক অপারেশন এবং বিশ্লেষণ করতে সহায়তা করে। Group By, Aggregation Functions, Window Functions, এবং Data Summarization পদ্ধতির মাধ্যমে আপনি ডেটার থেকে মূল্যবান তথ্য উপস্থাপন করতে পারেন। Describe() ফাংশন এবং অন্যান্য অপারেশনগুলির মাধ্যমে ডেটার সারাংশ তৈরি করা সহজ এবং দ্রুত হয়, যা ডেটা বিশ্লেষণে গুরুত্বপূর্ণ ভূমিকা পালন করে।
Read more